package main

import (
	"fmt"
	"io"
	"os"
)

func f1() {
	//打开要操作的文件
	fileobj, err := os.OpenFile("./sb.txt", os.O_RDWR, 0644)
	if err != nil {

		fmt.Printf("错误信息：%v", err)
		return
	}
	defer fileobj.Close()
	//因为没有办法再文件内容中间插入内容，所以要接触一个临时文件
	tmpobj, err := os.OpenFile("./sb.tmp", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
	if err != nil {

		fmt.Printf("错误信息：%v", err)
		return
	}
	defer tmpobj.Close()
	//读源文件写入临时文件
	var ret [1]byte
	n, err := fileobj.Read(ret[:])
	if err != nil {
		fmt.Printf("错误信息：%v", err)
		return
	}
	//写入临时文件
	tmpobj.Write(ret[:n])

	// fileobj.Seek(1, 0)
	// var b [1]byte
	// fmt.Printf("%T\n", b)
	//再写入要插入的内容
	var s []byte
	s = []byte{'c'}
	tmpobj.Write(s)
	//把源文件后续内容写入临时文件
	var x [1024]byte
	for {
		n, err := fileobj.Read(x[:])
		if err == io.EOF {
			tmpobj.Write(x[:n])
			break
		}
		if err != nil {
			fmt.Printf("错误信息：%v\n", err)
			return
		}
		tmpobj.Write(x[:n])
	}

	//源文件后续写入临时文件
	fileobj.Close()
	tmpobj.Close()
	os.Rename("./sb.tmp", "./sb.txt")
	// fmt.Printf("%v\n", n)
	// fmt.Println(string(b[:n]))

}

func main() {
	fmt.Println("中间插入字符")
	f1()
}
